home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / lang / SmallEiffel.lha / SmallEiffel / lib_se / abstract_current.e next >
Text File  |  1998-12-22  |  5KB  |  245 lines

  1. --          This file is part of SmallEiffel The GNU Eiffel Compiler.
  2. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  3. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  4. --                       http://www.loria.fr/SmallEiffel
  5. -- SmallEiffel is  free  software;  you can  redistribute it and/or modify it 
  6. -- under the terms of the GNU General Public License as published by the Free
  7. -- Software  Foundation;  either  version  2, or (at your option)  any  later 
  8. -- version. SmallEiffel is distributed in the hope that it will be useful,but
  9. -- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. -- or  FITNESS FOR A PARTICULAR PURPOSE.   See the GNU General Public License 
  11. -- for  more  details.  You  should  have  received a copy of the GNU General 
  12. -- Public  License  along  with  SmallEiffel;  see the file COPYING.  If not,
  13. -- write to the  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  14. -- Boston, MA 02111-1307, USA.
  15. --
  16. deferred class ABSTRACT_CURRENT
  17.    --   
  18.    -- Handling of the pseudo variable "Current".
  19.    --
  20.  
  21. inherit EXPRESSION;
  22.    
  23. feature 
  24.  
  25.    start_position: POSITION;
  26.    
  27.    result_type: TYPE;
  28.      -- Non Void when checked;
  29.    
  30. feature {NONE}
  31.    
  32.    make(sp: like start_position) is
  33.       require
  34.      sp /= Void
  35.       do
  36.      start_position := sp;
  37.       ensure
  38.      start_position = sp
  39.       end;
  40.    
  41. feature 
  42.  
  43.    is_current: BOOLEAN is true;
  44.  
  45.    is_writable: BOOLEAN is false;
  46.  
  47.    is_manifest_string: BOOLEAN is false;
  48.  
  49.    is_static: BOOLEAN is false;
  50.    
  51.    is_pre_computable: BOOLEAN is false;
  52.  
  53.    is_result: BOOLEAN is false;
  54.  
  55.    is_void: BOOLEAN is false;
  56.  
  57.    can_be_dropped: BOOLEAN is true;
  58.  
  59.    c_simple: BOOLEAN is true;
  60.  
  61.    use_current: BOOLEAN is true;
  62.    
  63.    isa_dca_inline_argument: INTEGER is 0;
  64.  
  65. feature {NONE}
  66.  
  67.    is_written: BOOLEAN is
  68.      -- True when it is a really written Current.
  69.       deferred
  70.       end;
  71.  
  72. feature 
  73.  
  74.    to_string, to_key: STRING is
  75.       do
  76.      Result := us_current;
  77.       end;
  78.  
  79.    frozen static_value: INTEGER is
  80.       do
  81.       end;
  82.  
  83.    frozen afd_check is
  84.       do
  85.       end;
  86.  
  87.    frozen dca_inline_argument(formal_arg_type: TYPE) is
  88.       do
  89.       end;
  90.  
  91.    frozen mapping_c_target(target_type: TYPE) is
  92.       local
  93.      flag: BOOLEAN;
  94.       do
  95.      if is_written then
  96.         flag := cpp.call_invariant_start(target_type);
  97.      end;
  98.      cpp.print_current;
  99.      if flag then
  100.         cpp.call_invariant_end;
  101.      end;
  102.       end;
  103.  
  104.    frozen mapping_c_arg(formal_arg_type: TYPE) is
  105.       local
  106.      rt: like result_type;
  107.       do
  108.      rt := result_type.run_type;
  109.      if rt.is_reference then
  110.         if formal_arg_type.is_reference then
  111.            -- Reference into Reference :
  112.            cpp.put_string(fz_cast_t0_star);
  113.            cpp.print_current;
  114.         else
  115.            -- Reference into Expanded :
  116.            rt.to_expanded;
  117.            cpp.put_character('(');
  118.            cpp.print_current;
  119.            cpp.put_character(')');
  120.         end;
  121.      else
  122.         if formal_arg_type.is_reference then
  123.            -- Expanded into Reference :
  124.            rt.to_reference;
  125.            cpp.put_character('(');
  126.            cpp.print_current;
  127.            cpp.put_character(')');
  128.         else
  129.            -- Expanded into Expanded :
  130.            cpp.print_current;
  131.         end;
  132.      end;
  133.       end;
  134.  
  135.    frozen c_declare_for_old is
  136.       do 
  137.       end;
  138.       
  139.    frozen compile_to_c_old is
  140.       do 
  141.       end;
  142.       
  143.    frozen compile_to_jvm_old is
  144.       do 
  145.       end;
  146.    
  147.    frozen collect_c_tmp is
  148.       do
  149.       end;
  150.  
  151.    frozen compile_to_c is
  152.       do
  153.      if result_type.is_user_expanded then
  154.         cpp.put_character('*');
  155.      end;
  156.      cpp.print_current;
  157.       end;
  158.    
  159.    frozen compile_to_jvm is
  160.       do
  161.      result_type.jvm_push_local(0);
  162.       end;
  163.    
  164.    frozen compile_target_to_jvm is
  165.       do
  166.      if is_written then
  167.         standard_compile_target_to_jvm;
  168.      else
  169.         compile_to_jvm;
  170.      end;
  171.       end;
  172.    
  173.    frozen compile_to_jvm_assignment(a: ASSIGNMENT) is
  174.       do
  175.       end;
  176.    
  177.    frozen jvm_branch_if_false: INTEGER is
  178.       do
  179.      compile_to_jvm;
  180.      Result := code_attribute.opcode_ifeq;
  181.       end;
  182.  
  183.    frozen jvm_branch_if_true: INTEGER is
  184.       do
  185.      compile_to_jvm;
  186.      Result := code_attribute.opcode_ifne;
  187.       end;
  188.  
  189.    frozen compile_to_jvm_into(dest: TYPE): INTEGER is
  190.       do
  191.      Result := standard_compile_to_jvm_into(dest);
  192.       end;
  193.  
  194.    frozen to_runnable(ct: TYPE): like Current is
  195.       do
  196.      if result_type = Void then
  197.         result_type := ct;
  198.         Result := Current
  199.      elseif result_type = ct then
  200.         Result := Current
  201.      else
  202.         !!Result.make(start_position);
  203.         Result := Result.to_runnable(ct);
  204.      end;
  205.       end;
  206.    
  207.    frozen precedence: INTEGER is
  208.       do
  209.      Result := atomic_precedence;
  210.       end;
  211.    
  212.    frozen bracketed_pretty_print, frozen pretty_print is
  213.       do
  214.      fmt.put_string(us_current);
  215.       end;
  216.    
  217.    frozen print_as_target is
  218.       do
  219.      if is_written or else fmt.print_current then
  220.         fmt.put_string(us_current);
  221.         fmt.put_character('.');
  222.      end;
  223.       end;
  224.    
  225.    frozen short is
  226.       do
  227.      short_print.hook_or(us_current,us_current);
  228.       end;
  229.    
  230.    frozen short_target is
  231.       do
  232.      if is_written then
  233.         short;
  234.         short_print.a_dot;
  235.      end;
  236.       end;
  237. feature {CREATION_CALL,EXPRESSION_WITH_COMMENT}
  238.       
  239.    frozen jvm_assign is
  240.       do
  241.       end;
  242.  
  243. end -- ABSTRACT_CURRENT
  244.  
  245.